package main

import (
	"fmt"
)

/**
也可以通过内置的 copy 函数进行复制

需要注意的是copy函数不会扩容，也就是要复制的 slice 比原 slice 要大的时候，只会移除多余的
*/

func main() {
	slice1 := []int{1, 2, 3, 4, 5}
	slice2 := []int{5, 4, 3}

	copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
	fmt.Println(slice1, slice2)

	slice2 = []int{5, 4, 3}
	copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
	fmt.Println(slice1, slice2)
}

/**
总结：
归根结底使用 := 进行浅拷贝的时候
 1.会产生深拷贝还是拷贝取决于被拷贝数据的数据类型：
     如果是值类型就会产生深拷贝，如果是引用类型就会产生浅拷贝
 2.深浅拷贝的区别：
	深拷贝：只拷贝值，地址不相关。拷贝结束两变量互不影响，。
	浅拷贝：拷贝地址，两个变量地址相同，修改其中一个变量的值，另一个也会跟着改变。
 3.对于引用数据类型，想实现深拷贝，就不能直接 := 而是要先 new ,然后在复制
*/
